{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.12.0\n",
      "/device:GPU:0\n"
     ]
    }
   ],
   "source": [
    "print(tf.__version__)\n",
    "print(tf.test.gpu_device_name())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-3-8ef614dae8f3>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Anaconda3_64\\envs\\TensorFlow\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Anaconda3_64\\envs\\TensorFlow\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Anaconda3_64\\envs\\TensorFlow\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Anaconda3_64\\envs\\TensorFlow\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 0 training steps, the loss is 2.40252, the validation accuracy is 0.2292\n",
      "after 1 training steps, the loss is 2.17417, the validation accuracy is 0.2188\n",
      "after 2 training steps, the loss is 2.26314, the validation accuracy is 0.4274\n",
      "after 3 training steps, the loss is 1.86204, the validation accuracy is 0.4986\n",
      "after 4 training steps, the loss is 1.78358, the validation accuracy is 0.3342\n",
      "after 5 training steps, the loss is 1.93667, the validation accuracy is 0.538\n",
      "after 6 training steps, the loss is 1.65708, the validation accuracy is 0.636\n",
      "after 7 training steps, the loss is 1.56752, the validation accuracy is 0.543\n",
      "after 8 training steps, the loss is 1.37136, the validation accuracy is 0.58\n",
      "after 9 training steps, the loss is 1.30225, the validation accuracy is 0.6726\n",
      "after 100 training steps, the loss is 0.375536, the validation accuracy is 0.8796\n",
      "after 200 training steps, the loss is 0.283008, the validation accuracy is 0.9134\n",
      "after 300 training steps, the loss is 0.221881, the validation accuracy is 0.9172\n",
      "after 400 training steps, the loss is 0.111755, the validation accuracy is 0.93\n",
      "after 500 training steps, the loss is 0.30897, the validation accuracy is 0.9348\n",
      "after 600 training steps, the loss is 0.143751, the validation accuracy is 0.9422\n",
      "after 700 training steps, the loss is 0.300143, the validation accuracy is 0.9414\n",
      "after 800 training steps, the loss is 0.0848736, the validation accuracy is 0.9442\n",
      "after 900 training steps, the loss is 0.342108, the validation accuracy is 0.9416\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.953\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i < 10 or i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "[[1.61898413e-07 1.76275599e-08 1.85196623e-05 1.74337969e-04\n",
      "  2.11863842e-08 2.40436947e-07 8.75308419e-12 9.99772608e-01\n",
      "  1.23066243e-07 3.39617072e-05]\n",
      " [1.26835139e-05 1.55302929e-04 9.93082285e-01 6.40241383e-03\n",
      "  1.54379691e-08 8.52102385e-05 1.43721903e-04 5.75323211e-09\n",
      "  1.18382828e-04 2.44893439e-09]\n",
      " [5.22517348e-06 9.78010476e-01 6.38129469e-03 2.07381160e-03\n",
      "  1.35812431e-03 3.17099650e-04 5.48346026e-04 6.11779047e-03\n",
      "  4.73485515e-03 4.53010842e-04]\n",
      " [9.96411622e-01 2.65775998e-05 6.50751754e-05 1.07495871e-04\n",
      "  9.01996827e-05 3.29005736e-04 1.97780973e-04 2.56787171e-03\n",
      "  1.91968375e-05 1.85071040e-04]\n",
      " [5.91229182e-04 1.50895983e-04 7.33797380e-04 2.73193320e-04\n",
      "  8.69125783e-01 5.99418476e-04 3.30291659e-04 1.76565349e-03\n",
      "  1.24962127e-03 1.25180125e-01]\n",
      " [1.73851561e-07 9.86230671e-01 2.82672612e-04 1.13311654e-03\n",
      "  3.47247202e-04 1.63943587e-05 7.85044358e-06 1.01667084e-02\n",
      "  1.42929109e-03 3.85959051e-04]\n",
      " [4.21433742e-06 1.30104854e-05 5.79438638e-05 4.04333259e-05\n",
      "  9.72724199e-01 1.79866981e-03 8.66694681e-05 2.80050648e-04\n",
      "  1.89027656e-02 6.09207107e-03]\n",
      " [4.37811906e-07 1.33109488e-05 1.00323254e-04 1.33519834e-02\n",
      "  2.03208881e-03 1.46650404e-04 3.79172292e-07 4.22029430e-03\n",
      "  2.19251771e-04 9.79915321e-01]\n",
      " [8.07643752e-04 2.43829028e-03 4.40974720e-03 1.91665429e-04\n",
      "  4.04233411e-02 1.40347704e-01 7.60614693e-01 2.53152721e-05\n",
      "  3.33940350e-02 1.73475984e-02]\n",
      " [8.25466998e-07 1.57758734e-07 8.61065303e-07 4.72806596e-06\n",
      "  8.45253281e-03 8.82550637e-07 1.58272755e-07 3.03459610e-03\n",
      "  2.18611793e-04 9.88286555e-01]\n",
      " [9.95641589e-01 1.06171165e-05 3.27690999e-04 3.33669101e-04\n",
      "  2.82753285e-06 3.40727647e-03 1.08478991e-04 5.00427559e-05\n",
      "  6.65620828e-05 5.12880433e-05]\n",
      " [2.67337207e-02 4.43915231e-03 2.60178633e-02 5.80695793e-02\n",
      "  1.03056744e-01 2.06674878e-02 4.24495012e-01 6.17949059e-03\n",
      "  3.22626621e-01 7.71435862e-03]\n",
      " [8.89021621e-08 1.49374344e-07 1.05765048e-06 2.28735153e-05\n",
      "  3.01459013e-03 3.47913874e-06 1.68510397e-08 5.79132815e-04\n",
      "  1.52293032e-05 9.96363461e-01]\n",
      " [9.99150157e-01 1.24016401e-06 1.58302137e-05 6.13754819e-05\n",
      "  6.13657858e-06 2.42035749e-04 7.51135485e-06 3.57043580e-04\n",
      "  7.93620202e-05 7.94300140e-05]\n",
      " [5.90517579e-10 9.98107076e-01 5.86533270e-06 1.52856717e-03\n",
      "  5.34734936e-05 1.41785608e-06 2.68963134e-07 1.67564285e-05\n",
      "  2.43045346e-04 4.35996553e-05]\n",
      " [1.31045148e-04 2.00637174e-03 7.20073003e-04 6.93403408e-02\n",
      "  1.08415661e-04 8.83035243e-01 7.13262634e-05 8.15196327e-05\n",
      "  4.41767909e-02 3.28819238e-04]]\n",
      "[[6 1 4 8 0 5 2 9 3 7]\n",
      " [9 7 4 0 5 8 6 1 3 2]\n",
      " [0 5 9 6 4 3 8 7 2 1]\n",
      " [8 1 2 4 3 9 6 5 7 0]\n",
      " [1 3 6 0 5 2 8 7 9 4]\n",
      " [0 6 5 2 4 9 3 8 7 1]\n",
      " [0 1 3 2 6 7 5 9 8 4]\n",
      " [6 0 1 2 5 8 4 7 3 9]\n",
      " [7 3 0 1 2 9 8 4 5 6]\n",
      " [1 6 0 2 5 3 8 7 4 9]\n",
      " [4 1 7 9 8 6 2 3 5 0]\n",
      " [1 7 9 5 2 0 3 4 8 6]\n",
      " [6 0 1 2 5 8 3 7 4 9]\n",
      " [1 4 6 2 3 8 9 5 7 0]\n",
      " [0 6 5 2 7 9 4 8 3 1]\n",
      " [6 7 4 0 9 2 1 8 3 5]]\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(final_pred)\n",
    "        print(orders)\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对模型结构的理解10分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练与验证部分：\n",
    "\n",
    "模型结构是训练集上一个batch32个图片，每个图片是28*28=784个像素，一个图片的784个像素作为一次X输入，\n",
    "进入计算图进行一次前向计算和反向计算，以交叉熵损失为目标函数求其最小值，得到梯度更新神经元节点的w权重。\n",
    "\n",
    "一共进行1000次这样的batch，当batch数为100的整数倍时，输出当前batch的loss和验证集上的验证准确率。\n",
    "\n",
    "最后再输出测试集上的准确率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最终结果部分：\n",
    "对测试集前16个图片计算每个图片的预测值，并在输出的图片上显示它们的可信度，再输出这16幅图片预测的准确率。\n",
    "从结果可见，只有第3行第一列的结果预测错了，所以准确率是15/16=0.9375"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对模型训练过程（梯度如何计算，参数如何更新）的理解10分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练用到的损失函数为先计算softmax再计算交叉熵损失，优化算法是梯度下降法，学习率是固定的0.3\n",
    "参数更新是通过原参数加上(减去)学习率乘以学习率。\n",
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对计算图的理解10分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算图是有一个隐层和一个输出层的全连接神经网络，输入是一个784维的向量，隐层有100个神经元，它们的logis通过ReLU函数激活，\n",
    "输出层有10个神经元，输出logit经过softmax后对应0到9的概率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 解释这⾥的模型为什么效果⽐较差10分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我觉得可能的原因有：\n",
    "\n",
    "1.计算图可能还需要加一个隐层\n",
    "\n",
    "2.交叉熵损失比较简单，不能很好地使类间距增大，考虑使用Congenerous cosine loss。\n",
    "\n",
    "3.学习率是固定的0.3,在 trainig_step = 1000 的情况下不能很好地更新参数，考虑使用CLR。\n",
    "\n",
    "4.优化算法为梯度下降法，更新速度比较慢，考虑用Adam优化算法。\n",
    "\n",
    "5.考虑减小batch size， 增大training step"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
